fun main(args: Array<String>) {

    /**
     * 在 Kotlin 中字符串用 String 类型表示。字符串是不可变的。 字符串的元素——字符可以使用索引运算符访问: s[i]。 可以用 for 循环迭代字符串:
     */
    val str: String = "人海未见之时，我亦独行在这城市料峭，春醒，酷暑，骤雨，寒意四起，大雁南飞，而后，大雪，寒风，斗转星移，人间寒暑，如此之后, 才得墓然回首，四目相对。"
    val str2: String = "终有相见之时，你亦不再孤行于世春芽，夏涤，秋篱，冬绒，相思四季，待雁北归，你我，相遇，缘起，星辰月笠，春秋旖旎，自此以后, 才可白头相许，永不分离。";
    for (char in str) {
        println(char)
    }

    /**
     * 和 Java 一样，Kotlin 可以用 + 操作符连接字符串。这也适用于连接字符串与其他类型的值， 只要表达式中的第一个元素是字符串，
     * 但是 Kotlin 中有字符串模板，大部分情况下建议使用字符串模板来替代+拼接字符串。
     */
    val age = 18
    println("I am " + age + " years old!")
    println("I am $age years old!")


    /**
     * 字符串的值
     * Kotlin 有两种类型的字符串字面值：转义字符串可以有转义字符， 以及原始字符串可以包含换行以及任意文本。以下是转义字符串的一个示例:
     */
    val s = "Hello，world!\n"
    //转义采用传统的反斜杠方式。
    println("s:" + s)

    /**
     * 字符串使用三个引号（"""）分解符括起来，内部没有转义并且可以包含换行以及任何其他字符：
     */
    val text = """
        for(c in "foo")
        print(c)
        """
    println("text:" + text)

    /**
     * 还可以通过 trimMargin() 函数去除前导空格：
     */
    val text2 = """
    |Tell me and I forget.
    |Teach me and I remember.
    |Involve me and I learn.
    |(Benjamin Franklin)
    """.trimMargin()
    println("text2:" + text2)

    /**
     * 字符串模板
     * 字符串字面值可以包含模板表达式 ，即一些小段代码，会求值并把结果合并到字符串中。 模板表达式以美元符（$）开头，由一个简单的名字构成:
     */
    val number = 100
    println("The Result is $number")

    //或者用花括号${}括起来的任意表达式:
    val text3 = "This is Text3"
    println("text length is ${text3.length}")

    //字符串与转义字符串内部都支持模板。 如果你需要在原始字符串中表示字面值 $ 字符（它不支持反斜杠转义），你可以用下列语法：
    val price = "${'$'}9.99"
    println("price:" + price)


}